package demo.dangdang.elastic.job;

import java.util.List;

import com.dangdang.ddframe.job.api.ShardingContext;
import com.dangdang.ddframe.job.api.dataflow.DataflowJob;

import demo.db.mybatis.pojo.User;

/**
 * 
 * Dataflow类型用于处理数据流，需实现DataflowJob接口。该接口提供2个方法可供覆盖，分别用于抓取(fetchData)和处理(processData)数据。
 * 可通过DataflowJobConfiguration配置是否流式处理。 流式处理数据只有fetchData方法的返回值为null或集合长度为空时，作业才停止抓取，否则作业将一直运行下去；
 * 非流式处理数据则只会在每次作业执行过程中执行一次fetchData方法和processData方法，随即完成本次作业。
 *
 */
public class DataflowJobDemo implements DataflowJob<User> {

    /*
     * status 0：待处理 1：已处理
     */
    @Override
    public List<User> fetchData(ShardingContext shardingContext) {
        List<User> users = null;
        /**
         * users = SELECT * FROM user WHERE status = 0 AND MOD(id, shardingTotalCount) = shardingItem Limit 0, 30
         */
        return users;
    }

    @Override
    public void processData(ShardingContext shardingContext, List<User> data) {
        for (User user : data) {
            System.out.println(String.format("用户 %s 开始计息", user.getId()));
            user.setStatus((byte) 1);
            /**
             * update user
             */
        }
    }
}
